I worked with Marc to implement the Animation Module from the Engine we developed for the Game Engines subject, called Spark Engine. In this module I worked on the following features:
I worked with Alex Morales to implement the Anim Tween, a simple module which allows different types of transformations of a GameObject such as color, size, position. All of these can have a different type of curve.
At the start of the project, a simple State Machine based on a enum was developed for the character, but we quickly realized that it had bad scalability and would make us repeat code.
To fix these problems, I changed from Enum State Machine to a Hierarchical State Machine, which encapsulated the different states of the characters effectively and helped us scale the functionalities of each state.
After working on the Hierarchical State Machine rework, I started improving the character movement that was done before. I added acceleration and slow to the dodge, and had to rework most of the basic movement since during the development of the project, the Physics Module was changed and I had to redo the movement.
Also, there was a problem with the movement when going down a slope, since it was made accelerating forward, it would go in the air, fall down, move forward, go into the air again, fall down over and over when going down a slope. I had to make a Raycast from the feet of the player to detect the surface the character was on and then calculate the slope of it to adapt the movement on that direction.
In relation with the movement, I also implemented a set of sphere collider inside the feet of the character which triggers a footstep sound every time it collider with a ground surface, taking in count the material its made of(stone, sand, wood, etc).
I worked on programming all the inputs and actions the character can do in combat, and all the different features that affect the attacks.
The combat is based on two differnt types of attacks, Spells and Combo Attacks, both share some small features but work on a different way.
To create the combos of the characters, I based the structure on a simple State Machine of Attacks. Each Attack would be a node with its own information of damage and effects, and also would point to the other Attacks it can link to.
With this structure we easily created new Attacks and made them link to each other with the input we wanted to.
For the structure of the Spells, I wanted to creatd something that could have good scalability and also potential to generate a great diversity of spells.
I created a system based on Tags, on which a spell can have a different amount of tags making it behave in a way or another.
With these structure I was able to create all the spells of each character efficiently and allowed the designers to tweak them easily.
All the attacks had a set of small features to improve the feel and flow of the combat.
This character requires it's own section in this page because I helped designing the character combos with Alejandro Paris and personally implemented all it's attacks, spells and dodge.
The idea was to have two long range combos with low damage and two close range combos with higher damage. With these sets of combos, we thought that would be a good idea to move the enemy so we could flow between those. So we made one of the long range combos pull the enemy towards Yennefer and one of the close range combos to knock the enemy away.
I worked on the structure of the Relic System with Cere, setting the base of how it would interact with the Character, the Stats of the player and the effects they would apply, depending on the type of Relic that was picked up.
We based the structure on Relic Types and Relic Effects, the type indicates if it's going to work on a Dash or an Attack, and then the effect will determine if it's going to be fire(apply burn), ice(apply slow), etc.
After helping with the base, I left Cere to continue the work and develop all the Relics.
The Effects System was designed with scalability in mind, so we could create any type of positive and negative effects, as desired by the Game Designers. To achieve this I created a base Effect class with the ability to modify Stats and have different callbacks based on Event
With the base class created I started working on Timed Effects, with which we can apply positive or negative effects to a Stat during a set amount of time or make it work with ticks, so every x amount of time it will affect the stats.
Thanks to this structure I was able to create Effects like a Burn, Slow, Shield, Speed Boost, etc.
For the enemies of this project I implemented the following features related to the combat:
During the development of the project, the team felt like we needed different types of utility structures so I developed some of them: